Telegram Group & Telegram Channel
💡 Сегодня покажу вам способ, как удобно логировать enum-значения в C++, не превращая код в кашу из switch и if.

📌 Проблема: у вас есть enum, и вы хотите красиво выводить его в лог или std::cout, но стандартно C++ этого не умеет.

Например:


enum class Status {
Ok,
Error,
Timeout
};


Обычно вы пишете:


std::string to_string(Status s) {
switch(s) {
case Status::Ok: return "Ok";
case Status::Error: return "Error";
case Status::Timeout: return "Timeout";
}
return "Unknown";
}


Но есть способ проще и без switch — с помощью макроса и X-макросов:


#define STATUS_ENUM(XX) \
XX(Ok) \
XX(Error) \
XX(Timeout)

enum class Status {
#define GENERATE_ENUM(name) name,
STATUS_ENUM(GENERATE_ENUM)
#undef GENERATE_ENUM
};

inline const char* to_string(Status s) {
switch(s) {
#define GENERATE_CASE(name) case Status::name: return #name;
STATUS_ENUM(GENERATE_CASE)
#undef GENERATE_CASE
default: return "Unknown";
}
}


Теперь достаточно один раз задать список значений — и не нужно вручную синхронизировать enum и to_string().

Такой подход легко масштабируется.
Удобно для логирования, отладки и сериализации.

Пользуйтесь!

➡️ @cpp_geek



tg-me.com/cpp_geek/307
Create:
Last Update:

💡 Сегодня покажу вам способ, как удобно логировать enum-значения в C++, не превращая код в кашу из switch и if.

📌 Проблема: у вас есть enum, и вы хотите красиво выводить его в лог или std::cout, но стандартно C++ этого не умеет.

Например:


enum class Status {
Ok,
Error,
Timeout
};


Обычно вы пишете:


std::string to_string(Status s) {
switch(s) {
case Status::Ok: return "Ok";
case Status::Error: return "Error";
case Status::Timeout: return "Timeout";
}
return "Unknown";
}


Но есть способ проще и без switch — с помощью макроса и X-макросов:


#define STATUS_ENUM(XX) \
XX(Ok) \
XX(Error) \
XX(Timeout)

enum class Status {
#define GENERATE_ENUM(name) name,
STATUS_ENUM(GENERATE_ENUM)
#undef GENERATE_ENUM
};

inline const char* to_string(Status s) {
switch(s) {
#define GENERATE_CASE(name) case Status::name: return #name;
STATUS_ENUM(GENERATE_CASE)
#undef GENERATE_CASE
default: return "Unknown";
}
}


Теперь достаточно один раз задать список значений — и не нужно вручную синхронизировать enum и to_string().

Такой подход легко масштабируется.
Удобно для логирования, отладки и сериализации.

Пользуйтесь!

➡️ @cpp_geek

BY C++ geek


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/cpp_geek/307

View MORE
Open in Telegram


C geek Telegram | DID YOU KNOW?

Date: |

At a time when the Indian stock market is peaking and has rallied immensely compared to global markets, there are companies that have not performed in the last 10 years. These are definitely a minor portion of the market considering there are hundreds of stocks that have turned multibagger since 2020. What went wrong with these stocks? Reasons vary from corporate governance, sectoral weakness, company specific and so on. But the more important question is, are these stocks worth buying?

Look for Channels Online

You guessed it – the internet is your friend. A good place to start looking for Telegram channels is Reddit. This is one of the biggest sites on the internet, with millions of communities, including those from Telegram.Then, you can search one of the many dedicated websites for Telegram channel searching. One of them is telegram-group.com. This website has many categories and a really simple user interface. Another great site is telegram channels.me. It has even more channels than the previous one, and an even better user experience.These are just some of the many available websites. You can look them up online if you’re not satisfied with these two. All of these sites list only public channels. If you want to join a private channel, you’ll have to ask one of its members to invite you.

C geek from ua


Telegram C++ geek
FROM USA